package practiceProjects;

/**
 * @Project ：learn_java
 * @File ：MoveSameNamePicsInChildFolders.java
 * @IDE ：IntelliJ IDEA
 * @Author ：豆包
 * @Date ：2025/4/17 11:18
 * @Description ：
 * 有一个文件夹，里面有很多子文件夹，
 * 每个子文件夹里面都有一张图片，这些图片同名，
 * 将这些图片移到当前文件夹，
 * 且按原先的创建时间命名，同时删除原有的所有子文件夹
 */

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

public class MoveSameNamePicsInChildFolders {
    private static final String TARGET_IMAGE_NAME = "Capture001.png";   // 子文件夹里面的图片同名
    private static final DateTimeFormatter TIME_FORMAT = DateTimeFormatter
            .ofPattern("yyyyMMddHHmmss"); // 时间格式：年月日时分秒毫秒
    // 父文件夹路径
    private static final Path currentDir = Paths.get("C:\\Users\\zhq11\\Pictures\\图片2\\c\\Feedback");

    public static void main(String[] args) {

        // 遍历父文件夹，处理里面的子文件夹
        try (DirectoryStream<Path> dirStream = Files.newDirectoryStream(currentDir, Files::isDirectory)) {
            for (Path subDir : dirStream) {
                processSubdirectory(subDir);
            }
            System.out.println("操作完成！共处理 " + processedCount + " 个文件夹");
        } catch (IOException e) {
            System.err.println("目录遍历失败: " + e.getMessage());
        }
    }

    private static int processedCount = 0;

    private static void processSubdirectory(Path subDir) {
        // 路径拼接
        Path imagePath = subDir.resolve(TARGET_IMAGE_NAME);

        // 检查图片是否存在
        if (!Files.exists(imagePath) || !Files.isRegularFile(imagePath)) {
            System.out.println("跳过空文件夹: " + subDir.getFileName());
            return;
        }

        try {
            // 1. 获取文件创建时间
            LocalDateTime createTime = Files.readAttributes(imagePath, BasicFileAttributes.class)
                    .creationTime()
                    .toInstant()
                    .atZone(ZoneId.systemDefault())
                    .toLocalDateTime();

            // 2. 生成新文件名：时间戳+原扩展名
            String newFileName = TIME_FORMAT.format(createTime)
                    + "." + Files.probeContentType(imagePath).split("/")[1];

            // 3. 移动文件到上级目录（当前目录）
            Path targetPath = currentDir.resolve(newFileName);
            Files.move(imagePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
            System.out.println("移动成功: " + subDir.getFileName() + " → " + newFileName);

            // 4. 删除空文件夹
            Files.walkFileTree(subDir, new SimpleFileVisitor<>() {
                @Override
                public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
                    Files.delete(dir);
                    return FileVisitResult.CONTINUE;
                }
            });
            processedCount++;

        } catch (IOException e) {
            System.err.println("处理失败: " + subDir.getFileName() + " → " + e.getMessage());
        }
    }
}
